const joi = require('joi')

const username = joi.string().alphanum().min(1).max(10).required()

const password = joi.string().pattern(/^[\S]{6,12}$/).required()


// 定义 id, nickname, emial 的验证规则
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()

// dataUri() 指的是如下格式的字符串数据：
// 
const avater = joi.string().dataUri().required()

// 定义 分类名称 和 分类别名 的校验规则
const name = joi.string().required()
const alias = joi.string().alphanum().required()
const describe = joi.string().required()


// 定义 标题、分类Id、内容、发布状态 的验证规则
const title = joi.string().required()
const cate_id = joi.number().integer().min(1).required()
const content = joi.string().required().allow('')
const state = joi.string().valid('已发布', '草稿').required()



/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

//定义注册验证和登录表单数据的规则

exports.reg_login_ruls = {
    body: {
        username,
        password
    }
}

exports.updateRuls = {
    body: {
        id,
        nickname,
        email
    }
}

exports.updatePwd = {
    body: {
        // 使用 password 这个规则，验证 req.body.oldPwd 的值
        oldPwd: password,
        // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
        // 解读：
        // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
        // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
        // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
        newPwd: joi.not(joi.ref('oldPwd')).concat(password),
    },
}

//头像规则    
exports.updateAvatar = {
    body: {
        avater,
    },
}

exports.addart = {
    body: {
        name,
        alias,
        describe
    },
}

exports.deleteArt = {
    params: {
        id,
    },
}

exports.searchArt = {
    params: {
        name,
    },
}

exports.updateArt = {
    body: {
        id,
        name,
        alias,
        describe
    },
}

exports.addArticle = {
    body: {
        title,
        cate_id,
        content,
        state,
    },
}